<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background: pink;
            position: absolute;
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <button id="btn1">拖拽回放</button>
    <script>
        /*
            1.当鼠标在box盒子按下的时候
            2.并且鼠标window中移动时候 box元素跟着鼠标一起移动
        */
        var box = document.querySelector('.box');
        var arr = [];
        var oBtn = document.getElementById('btn1');
        box.onmousedown = function () {

            // 按下之后 在window中移动
            window.onmousemove = function (e) {
                // box元素跟着光标移动
                // 获取光标在可视窗口的坐标
                e = e || window.event;
                var x = e.clientX - box.offsetWidth / 2
                var y = e.clientY - box.offsetHeight / 2

                arr.push({
                    x: x,
                    y: y
                });

                // 4. 边界值判断
                // x 和 y 就是移动的距离
                if (x >= document.documentElement.clientWidth - box.offsetWidth) {
                    x = document.documentElement.clientWidth - box.offsetWidth
                }
                if (y >= document.documentElement.clientHeight - box.offsetHeight) {
                    y = document.documentElement.clientHeight - box.offsetHeight
                }
                if (x <= 0) {
                    x = 0
                }
                if (y <= 0) {
                    y = 0
                }

                // 然后把这个值赋值给box的left和top值
                box.style.left = x + 'px';
                box.style.top = y + 'px'
            }
        }
        // 当鼠标在任何位置抬起来的时候，要把移动事件清除
        window.onmouseup = function () {
            //清除一个事件，只需要将事件的值设置null
            window.onmousemove = null;
            // arr.reverse()
        };

        oBtn.onclick = function () {
            var timer = setInterval(function () {
                if (arr.length > 0) {
                    var oData = arr.pop();
                    // var oData = arr.shift();
                    box.style.left = oData.x + 'px';
                    box.style.top = oData.y + 'px';
                } else {
                    clearInterval(timer);
                }
            }, 10);
        };
    </script>
</body>

</html>